﻿using ConfExpert.Forms.Base;
using ConfExpert.Forms.ImportWizards;
using ConfExpert.Forms.ImportWizards.Stok;
using ConfExpert.Forms.ImportWizards.Yukleme;
using ConfExpert.Properties;
using ConfExpert.Utility;
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Controls;
using DevExpress.XtraEditors.Repository;
using DevExpress.XtraGrid;
using DevTeam;
using System;
using System.Data;

namespace ConfExpert.Forms.SatinAlma.YeniYapi
{
    public partial class Yuklemeler : XForm
    {
        public Yuklemeler()
        {
            InitializeComponent();
        }

        int YuklemeId = -1;
        public Yuklemeler(int YuklemeId)
        {
            InitializeComponent();
            this.YuklemeId = YuklemeId;
        }

        GridFormatRule gridFormatRule;
        private void Yuklemeler_Load(object sender, EventArgs e)
        {
            this.Text = "Yüklemeler";

            bbiBaslangic.EditValue = DateTime.Today.AddMonths(-3);
            bbiBitis.EditValue = DateTime.Today;

            bbiYenile.ItemClick += bbiYenile_ItemClick;
            ((RepositoryItemComboBox)bbiFiltreTipi.Edit).TextEditStyle = TextEditStyles.DisableTextEditor;

            gvYukleme.Init("GetYuklemeler2", "Beklenenler", DateTime.MinValue, DateTime.MinValue, string.Empty);
            gvYukleme.AddDetailGrid(gvYuklemeLines, "YuklemeId");
            gvYukleme.AddColumn("ToplamYuklenenMt", typeof(decimal), "SUM(Child({FK}).YuklenenMt)");
            gvYukleme.AddColumn("ToplamTutar", typeof(decimal), "SUM(Child({FK}).Tutar)");

            gvYukleme.SetViewCaption("Yükleme Bilgisi");
            gvYukleme.SetCaptions("IrsaliyeNo:İrsaliye No", "IrsaliyeTarihi:İrsaliye Tarihi", "YuklemeTarihi:Yükleme Tarihi", "GelisTarihi:Geliş Tarihi", "UreticiId:Üretici", "YuklemeSekliId:Yükleme Şekli", "TopDetayi:Top Detayı", "CurrencyId:Parabirimi");
            gvYukleme.FormatAsDate("IrsaliyeTarihi", "ETA", "FaturaTarihi", "YuklemeTarihi", "GelisTarihi");
            gvYukleme.FormatAsNumber(1, "ToplamYuklenenMt", "ToplamTutar");
            gvYukleme.FormatAsNumber(0, "KalanGun");
            gvYukleme.AddSummary("ToplamYuklenenMt");

            gridFormatRule = new GridFormatRule();
            FormatConditionRuleDataBar formatConditionRuleDataBar = new FormatConditionRuleDataBar();
            gridFormatRule.Column = gvYukleme.Columns["KalanGun"];
            formatConditionRuleDataBar.PredefinedName = "Yellow Gradient";
            gridFormatRule.Rule = formatConditionRuleDataBar;
            gvYukleme.FormatRules.Add(gridFormatRule);

            gvYuklemeLines.SetViewCaption("Yükleme Detayı");
            gvYuklemeLines.MakeColumnInvisible("YuklemeId", "POLinesId");
            gvYuklemeLines.SetCaptions("YuklemeLinesId:#", "YuklenenMt:Yüklenen Mt", "OrderRef:Order Ref.", "YikamaRecetesi:Yıkama", "Degisim:± %", "MasrafKalemiId:± Açıklama",
                "MasrafsizTutar:Masrafsız Tutar", "PONr:PO Nr."
                );

            gvYuklemeLines.FormatAsNumber(2, "YuklenenMt", "Fiyat", "Tutar", "MasrafsizTutar", "Degisim");
            gvYuklemeLines.AddSummary("YuklenenMt", "Tutar", "MasrafsizTutar");

            if (ytk(168))
                gvYuklemeLines.Columns["MasrafsizTutar"].VisibleIndex = gvYuklemeLines.VisibleColumns.Count-1;
            else
                gvYuklemeLines.MakeColumnInvisible("MasrafsizTutar");

            //emptyEditor = new RepositoryItemButtonEdit();
            //emptyEditor.Buttons.Clear();
            //emptyEditor.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.HideTextEditor;
            //gcYukleme.RepositoryItems.Add(emptyEditor);

            //gvYukleme.CustomRowCellEdit += gv_CustomRowCellEdit;

            if (isKD || isAdmin)
            {
                btnKaydet.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;
                GridManager gm = GridManager.GetManager(gvYukleme);
                gm.GridMenu.AddMenu("Top Detayı Aktar", TopDetayiAktar, Resources.Plus_16x16);
                if (ytk(68))
                    gm.GridMenu.AddMenu("Top Detayı ÖZEL Aktar", TopDetayiOZELAktar, Resources.Plus_16x16);

                gm.GridMenu.AddMenu("Yüklemeye Ait Sipariş Kaydını Resetle", YuklemeyiResetle, null);
                gm.GridMenu.AddMenu("Yüklemeyi Sil", YuklemeyiSil, Resources.delete_16);
                gm.GridMenu.AddMenu("Faturasını Düzenle", FaturayiDuzenle, Resources.Editor_Edit);
                //gm.GridMenu.AddMenu("Fatura bilgisini Import List’e taşı", ImportListeTasi, Resources.Plus_16x16);

                gvYukleme.MakeReadOnly("FaturaNo", "FaturaTarihi", "IrsaliyeNo", "IrsaliyeTarihi", "YuklemeTarihi", "YuklemeSekliId", "CurrencyId");
                gvYuklemeLines.MakeReadOnly("YuklenenMt", "Fiyat", "Degisim", "MasrafKalemiId", "Notlar");

                //gvYukleme.ShowingEditor += gvYukleme_ShowingEditor;
                //gvYuklemeLines.ShowingEditor += gvYuklemeLines_ShowingEditor;
            }
            else
            {
                btnKaydet.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
                gvYukleme.MakeReadOnly();
                gvYuklemeLines.MakeReadOnly();
            }

            scc.AutoSize();

            if (YuklemeId > -1)
                gvYukleme.ActiveFilterCriteria = "YuklemeId =" + YuklemeId.ToString();

            RepositoryItemHyperLinkEdit riPOId = new RepositoryItemHyperLinkEdit();
            riPOId.SingleClick = true;
            gvYukleme.Columns["AlisFaturasiId"].ColumnEdit = riPOId;
            gvYukleme.RowCellClick += gv_RowCellClick;

            gvYukleme.Columns["YuklemeTarihi"].ColumnEdit = new RepositoryItemDateEdit();
            gvYukleme.Columns["YuklemeSekliId"].ColumnEdit = RI(Rp.ShipMethod);

            gvYukleme.CellValueChanged += gvYukleme_CellValueChanged;
            txtBelgeNo.Edit.EditValueChanging += Edit_EditValueChanging;

            gvYukleme.MakeColumnInvisible("idxs", "GelisTarihi");
            gvYukleme.YanYanaGetirSagina("TopDetayi", "ToplamYuklenenMt", "ToplamTutar", "CurrencyId");
            gvYukleme.BestFitColumns();
            gvYuklemeLines.BestFitColumns();
        }

        void Edit_EditValueChanging(object sender, ChangingEventArgs e)
        {
            bbiBaslangic.Enabled = bbiBitis.Enabled = bbiFiltreTipi.Enabled = e.NewValue.ToStr() == string.Empty;
            if (bbiFiltreTipi.Enabled)
                bbiFiltreTipi_EditValueChanged(null, null);
        }

        void gvYukleme_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
        {
            if ("YuklemeTarihi YuklemeSekliId".Contains(e.Column.FieldName))
            {
                DataRow dr = gvYukleme.GetFocusedDataRow();

                DateTime YuklemeTarihi = dr["YuklemeTarihi"].ToDate();
                int ShipMethod = dr["YuklemeSekliId"].ToInt(-1);
                int VendorId = dr["UreticiId"].ToInt(-1);
                int OriginId = AppSession.Lookups.Vendor.FindByVendorId(VendorId).OriginId;
                int add = intParse(AppSession.Lookups.ETA.Compute("max(ETADays)", "(OriginId=" + OriginId + " OR OriginId is null) AND ShipMethodId=" + ShipMethod.ToString()));
                DateTime date = YuklemeTarihi.AddDays(add);
                if (date != null)
                    gvYukleme.SetFocusedRowCellValue("ETA", date);
            }
        }

        void gv_RowCellClick(object sender, DevExpress.XtraGrid.Views.Grid.RowCellClickEventArgs e)
        {
            if (e.Column.FieldName == "AlisFaturasiId")
                if (gvYukleme.GetFocusedDataRow() != null)
                {
                    int AlisFaturasiId = gvYukleme.GetFocusedDataRow()["AlisFaturasiId"].ToInt();
                    if (AlisFaturasiId > 0)
                        using (AlisFaturasi detay = new AlisFaturasi(AlisFaturasiId))
                            detay.ShowDialog();
                }
        }

        RepositoryItemButtonEdit emptyEditor;

        private void FaturayiDuzenle(object sender, EventArgs e)
        {
            int AlisFaturasiId = gvYukleme.GetFocusedRowCellValue("AlisFaturasiId").ToInt();
            if (AlisFaturasiId > 0)
                using (YeniFatura yf = new YeniFatura(0, AlisFaturasiId))
                    yf.ShowDialog();
        }

        private void YuklemeyiSil(object sender, EventArgs e)
        {
            int yuklemeId = gvYukleme.GetFocusedRowCellValue("YuklemeId").ToInt(-1);
            object gelisTarihi = gvYukleme.GetFocusedRowCellValue("GelisTarihi");

            if (gelisTarihi == DBNull.Value)
            {
                System.Windows.Forms.DialogResult dr = XtraMessageBox.Show("Yükleme bilgilerini silmek istediğinizden emin misiniz?", "Uyarı", System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Question, System.Windows.Forms.MessageBoxDefaultButton.Button2);
                if (dr == System.Windows.Forms.DialogResult.Yes)
                {
                    ExecuteNonQuery("DelYukleme", yuklemeId);
                    ShowInfoMessage("Yükleme bilgisi silindi.");
                    bbiYenile.PerformClick();
                }
            }
            else
            {
                ShowErrorMessage("Bu yüklemeye ait stok girişi olduğu için iptal edemezsiniz. Yönetici ile iletişime geçin.");
            }
        }

        void bbiYenile_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            RefreshData();
        }

        private void RefreshData()
        {
            gvYukleme.EndEditing();
            gvYuklemeLines.EndEditing();
            DateTime baslangic = bbiBaslangic.EditValue.ToDate();
            DateTime bitis = bbiBitis.EditValue.ToDate();
            string belgeno = txtBelgeNo.EditValue.ToStr();

            string FiltreTipi = bbiFiltreTipi.EditValue.ToStr();

            gvYukleme.FormatRules.Remove(gridFormatRule);
            gvYukleme.RefreshDataSource(true, "GetYuklemeler2", FiltreTipi, baslangic, bitis, belgeno);
            gvYukleme.FormatRules.Add(gridFormatRule);

            gvYukleme.BestFitColumns();
            gvYuklemeLines.BestFitColumns();
        }

        void TopDetayiOZELAktar(object sender, EventArgs e)
        {
            int UreticiId = gvYukleme.GetFocusedDataRow()["UreticiId"].ToInt();
            int YuklemeId = gvYukleme.GetFocusedDataRow()["YuklemeId"].ToInt();

            int res = ExecuteScalar("CheckYuklemeTopBilgileri", YuklemeId).ToInt();
            if (res > 0)
                ShowErrorMessage("Bu yüklemenin top bilgileri daha önce girilmiş.");

            else
                switch (UreticiId)
                {
                    case 72:   //LF
                    case 117:   //LTH yüklemesi (Destex_LTH_Tip1)
                        using (Destex_LTH_Tip2 tb = new Destex_LTH_Tip2(YuklemeId)) //en yenisi
                            tb.ShowDialog();
                        break;

                    case 42:   //Monti
                    case 70:   //Monti India
                        using (Monti_Tip3 tb = new Monti_Tip3(YuklemeId))
                            tb.ShowDialog();
                        break;
                }
        }

        void YuklemeyiResetle(object sender, EventArgs e)
        {
            int YuklemeId = gvYukleme.GetFocusedDataRow()["YuklemeId"].ToInt();

            ExecuteScalar("UpdYuklemeReset", YuklemeId);
            Notify("Yüklemeye Ait Sipariş Kaydı Resetlendi. Depo, Beklenen Yüklemeler İçinde Görebiliyor Olmalı.");
        }

        void TopDetayiAktar(object sender, EventArgs e)
        {
            int UreticiId = gvYukleme.GetFocusedDataRow()["UreticiId"].ToInt();
            int YuklemeId = gvYukleme.GetFocusedDataRow()["YuklemeId"].ToInt();

            int res = ExecuteScalar("CheckYuklemeTopBilgileri", YuklemeId).ToInt();
            if (res > 0)
                ShowErrorMessage("Bu yüklemenin top bilgileri daha önce girilmiş.");

            else
                switch (UreticiId)
                {
                    case 110:   //TAN TEKSTİL
                        using (Tan_Tekstil tb = new Tan_Tekstil(YuklemeId))
                            tb.ShowDialog();
                        break;

                    case 115:   //Lianfa: Destex AF
                        using (Destex_AF_Tip1 tb = new Destex_AF_Tip1(YuklemeId))
                            tb.ShowDialog();
                        break;

                    case 50:   //Seta
                    case 72:   //LF
                    case 117:   //LTH yüklemesi (Destex_LTH_Tip1)
                        using (Destex_LF_Tip2 tb = new Destex_LF_Tip2(YuklemeId)) //1 ve 3?
                            tb.ShowDialog();
                        break;

                    case 4:   //Albini
                        using (Albini_Tip1 tb = new Albini_Tip1(YuklemeId))
                            tb.ShowDialog();
                        break;

                    case 42:   //Monti
                        using (Monti_Tip1 tb = new Monti_Tip1(YuklemeId))
                            tb.ShowDialog();
                        break;

                    case 70:   //Monti India
                        using (Monti_Tip2 tb = new Monti_Tip2(YuklemeId))
                            tb.ShowDialog();
                        break;

                    case 9:   //Bossa
                        using (Bossa_Tip1 tb = new Bossa_Tip1(YuklemeId))
                            tb.ShowDialog();
                        break;

                    case 445:   //Destex GF
                        using (Destex_GF tb = new Destex_GF(YuklemeId))
                            tb.ShowDialog();
                        break;

                    default:
                        using (TopBilgileri tb = new TopBilgileri(YuklemeId))
                            tb.ShowDialog();
                        break;
                }
        }

        //void gv_CustomRowCellEdit(object sender, DevExpress.XtraGrid.Views.Grid.CustomRowCellEditEventArgs e)
        //{
        //    if (e.Column.FieldName == "Kstden")
        //        if (gvYukleme.GetRowCellValue(e.RowHandle, "Kstden").ToInt() == 0)
        //            e.RepositoryItem = emptyEditor;
        //}

        private void btnKaydet_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            gvYukleme.EndEditing();
            gvYuklemeLines.EndEditing();

            string AF = gvYukleme.DataTable().SerializeChanges();

            gvYukleme.Update("YuklemeId, IrsaliyeNo, IrsaliyeTarihi, YuklemeTarihi, YuklemeSekliId, ETA, CurrencyId", "Yukleme");
            gvYuklemeLines.Update("YuklemeLinesId, YuklenenMt, Fiyat, Degisim, MasrafKalemiId, Notlar", "YuklemeLines");

            if (AF != string.Empty)
                ExecuteNonQuery("UpdFaturaNo", AF);

            bbiYenile.PerformClick();
            Notify("Yükleme bilgileri başarıyla kaydedildi.");
        }

        private void bbiFiltreTipi_EditValueChanged(object sender, EventArgs e)
        {
            bool filtreEnabled = bbiFiltreTipi.EditValue.ToStr() != "Beklenenler";
            bbiBaslangic.Enabled = filtreEnabled;
            bbiBitis.Enabled = filtreEnabled;
        }

        private void gvYukleme_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
        {
            gvYuklemeLines.BestFitColumns();
        }
    }
}